<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title>Document</title>
    <script src="/vue.js"></script>
  </head>
  <body>
    <div id="app">
      <App></App>
    </div>
  </body>
  <script>
    /*
      创建组件:
        * Vue.extend(options):
          - options的写法和new Vue时的options写法类似,只是没有el选项,因为只有vm决定服务哪一个容器,而组件都是基于vm的
          - 我们希望给每一个组件都添加一个name配置项,代表当前组件的名称,目前的作用是为了在开发者工具区分组件
          - Vue.extend返回一个VueComponent构造函数,每次组件在使用的时候,都会被实例化,得到一个组件实例
          - 组件的模板有且只能有一个根元素

      组件的使用:
        * 首先创建一个组件,得到一个VueComponent构造函数
        * 要在父组件中或者vm实例中进行注册,才可以使用,需要使用components配置项进行注册
        * 在模板中通过标签的方式使用组件,单双标签都可以(在非单文件组件中,组件尽量写成双标签)
      */

    const App = Vue.extend({
      name: "App",
      template: `<h1>App{{message}}</h1>`,
      data() {
        return {
          message: "hello",
        };
      },
    });

    const vm = new Vue({
      el: "#app",
      components: {
        App,
      },
      data() {
        return {};
      },
    });
  </script>
</html>
